package linkedlist.leetcode_82_medium_two_pointer;

public class Recur {
    public ListNode deleteDuplicates(ListNode head) {
        // base case
        if (head == null || head.next == null) {
            return head;
        }
        // 情况 1 : 当前节点与下一个节点不相同时，递归判断以下一个节点为头节点的链表
        if (head.val != head.next.val) {
            head.next = deleteDuplicates(head.next);
            return head;
        } else {
            // 情况 2 : 节点相同时，跳过所有相同的节点，从最后一个相同节点的下一个节点继续递归判断
            while (head.next != null && head.val == head.next.val) {
                head = head.next;
            }
            // 从最后一个相同节点的下一个节点继续递归判断
            return deleteDuplicates(head.next);
        }
    }
}
